package com.quectel.business.common.forum;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.func.LambdaUtil;
import com.quectel.business.common.forum.vo.ForumMuteVo;
import com.quectel.constant.global.SystemConstants;
import com.quectel.core.module.forum.dto.ForumMuteDto;
import com.quectel.core.module.forum.dto.ForumMuteRecordDto;
import com.quectel.core.module.forum.service.ForumMuteRecordService;
import com.quectel.core.module.forum.service.ForumMuteService;
import com.quectel.util.common.DateUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 查询用户是否被禁言
 *
 * @author: bob
 * @email: bob.yu@quectel.com
 * @date: 2023-05-19 14:29:00
 */
@Component
public class ForumMuteBusiness {

    private static final String EXEC_TIME = "execTime";

    @DubboReference
    private ForumMuteService forumMuteService;
    @DubboReference
    private ForumMuteRecordService forumMuteRecordService;

    /**
     * 1正常 0禁言
     * 通过租户和mobileUserId 查看这个用户是否被禁言
     * @return
     */
    public ForumMuteVo getMuteStatus(Long tenantId , Long mobileUserId){
        ForumMuteVo forumMuteVo = new ForumMuteVo();
        // 先判断禁言用户表是否存在，不存在就返回正常状态
        Map<String,Object> sqlMap = new HashMap<>();
        sqlMap.put(LambdaUtil.getFieldName(ForumMuteDto::getTenantId), tenantId);
        sqlMap.put(LambdaUtil.getFieldName(ForumMuteDto::getMobileUserId),mobileUserId);
        int queryTotal = forumMuteService.queryTotal(sqlMap);
        if (queryTotal == 0){
            forumMuteVo.setStatus(SystemConstants.YES);
            forumMuteVo.setRecordText("用户状态正常");
        }else {
            // 查询到不是空，去查询当前是否在记录区间内
            sqlMap.put(EXEC_TIME , DateUtils.format(new Date(), DateUtils.FormatType.SIMPLE ));
            int total = forumMuteRecordService.queryTotal(sqlMap);
            List<ForumMuteRecordDto> list = null;
            if (total > 0) {
                list = forumMuteRecordService.queryList(sqlMap);
                // 这里只有一条禁言记录取第一个
                ForumMuteRecordDto forumMuteRecordDto = list.get(0);
                String recordText = "您已被管理员禁言，禁言时间为："+
                        DateUtil.format(forumMuteRecordDto.getStartTime(), DatePattern.NORM_DATE_FORMATTER) + "~" +
                        DateUtil.format(forumMuteRecordDto.getEndTime(),DatePattern.NORM_DATE_FORMATTER);
                forumMuteVo.setStatus(SystemConstants.NO);
                forumMuteVo.setRecordText(recordText);
            }else {
                forumMuteVo.setStatus(SystemConstants.YES);
                forumMuteVo.setRecordText("用户状态正常");
            }
        }
        return forumMuteVo;
    }

}
